home *** CD-ROM | disk | FTP | other *** search
- package java.beans;
-
- import java.awt.Component;
- import java.awt.event.ComponentListener;
- import java.lang.reflect.Array;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.util.EventListener;
- import javax.swing.JMenuItem;
- import javax.swing.event.ChangeListener;
- import sun.reflect.misc.MethodUtil;
-
- public class DefaultPersistenceDelegate extends PersistenceDelegate {
- private String[] constructor;
- private Boolean definesEquals;
-
- public DefaultPersistenceDelegate() {
- this(new String[0]);
- }
-
- public DefaultPersistenceDelegate(String[] var1) {
- this.constructor = var1;
- }
-
- private static boolean definesEquals(Class var0) {
- try {
- return var0 == var0.getMethod("equals", Object.class).getDeclaringClass();
- } catch (NoSuchMethodException var2) {
- return false;
- }
- }
-
- private boolean definesEquals(Object var1) {
- if (this.definesEquals != null) {
- return this.definesEquals == Boolean.TRUE;
- } else {
- boolean var2 = definesEquals(var1.getClass());
- this.definesEquals = var2 ? Boolean.TRUE : Boolean.FALSE;
- return var2;
- }
- }
-
- protected boolean mutatesTo(Object var1, Object var2) {
- return this.constructor.length != 0 && this.definesEquals(var1) ? var1.equals(var2) : super.mutatesTo(var1, var2);
- }
-
- protected Expression instantiate(Object var1, Encoder var2) {
- int var3 = this.constructor.length;
- Class var4 = var1.getClass();
- Object[] var5 = new Object[var3];
-
- for(int var6 = 0; var6 < var3; ++var6) {
- String var7 = this.constructor[var6];
-
- try {
- var5[var6] = MethodUtil.invoke(ReflectionUtils.getPublicMethod(var4, "get" + NameGenerator.capitalize(var7), new Class[0]), var1, new Object[0]);
- } catch (Exception var9) {
- var2.getExceptionListener().exceptionThrown(var9);
- }
- }
-
- return new Expression(var1, var1.getClass(), "new", var5);
- }
-
- private boolean isTransient(Class var1, PropertyDescriptor var2) {
- if (var1 == null) {
- return false;
- } else {
- String var3 = var2.getName();
- BeanInfo var4 = MetaData.getBeanInfo(var1);
- PropertyDescriptor[] var5 = var4.getPropertyDescriptors();
-
- for(int var6 = 0; var6 < var5.length; ++var6) {
- PropertyDescriptor var7 = var5[var6];
- if (var3.equals(var7.getName())) {
- Object var8 = var7.getValue("transient");
- if (var8 != null) {
- return Boolean.TRUE.equals(var8);
- }
- }
- }
-
- return this.isTransient(var1.getSuperclass(), var2);
- }
- }
-
- private static boolean equals(Object var0, Object var1) {
- return var0 == null ? var1 == null : var0.equals(var1);
- }
-
- private void doProperty(Class var1, PropertyDescriptor var2, Object var3, Object var4, Encoder var5) throws Exception {
- Method var6 = var2.getReadMethod();
- Method var7 = var2.getWriteMethod();
- if (var6 != null && var7 != null && !this.isTransient(var1, var2)) {
- Expression var8 = new Expression(var3, var6.getName(), new Object[0]);
- Expression var9 = new Expression(var4, var6.getName(), new Object[0]);
- Object var10 = var8.getValue();
- Object var11 = var9.getValue();
- var5.writeExpression(var8);
- if (!equals(var11, var5.get(var10))) {
- Object[] var12 = var2.getValue("enumerationValues");
- if (var12 instanceof Object[] && Array.getLength(var12) % 3 == 0) {
- Object[] var13 = var12;
-
- for(int var14 = 0; var14 < var13.length; var14 += 3) {
- try {
- Field var15 = var1.getField((String)var13[var14]);
- if (var15.get((Object)null).equals(var10)) {
- var5.remove(var10);
- var5.writeExpression(new Expression(var10, var15, "get", new Object[]{null}));
- }
- } catch (Exception var16) {
- }
- }
- }
-
- invokeStatement(var3, var7.getName(), new Object[]{var10}, var5);
- }
- }
-
- }
-
- static void invokeStatement(Object var0, String var1, Object[] var2, Encoder var3) {
- var3.writeStatement(new Statement(var0, var1, var2));
- }
-
- private void initBean(Class var1, Object var2, Object var3, Encoder var4) {
- BeanInfo var5 = MetaData.getBeanInfo(var1);
- PropertyDescriptor[] var6 = var5.getPropertyDescriptors();
-
- for(int var7 = 0; var7 < var6.length; ++var7) {
- try {
- this.doProperty(var1, var6[var7], var2, var3, var4);
- } catch (Exception var18) {
- var4.getExceptionListener().exceptionThrown(var18);
- }
- }
-
- if (Component.class.isAssignableFrom(var1)) {
- EventSetDescriptor[] var19 = var5.getEventSetDescriptors();
-
- for(int var8 = 0; var8 < var19.length; ++var8) {
- EventSetDescriptor var9 = var19[var8];
- Class var10 = var9.getListenerType();
- if (var10 != ComponentListener.class && (var10 != ChangeListener.class || var1 != JMenuItem.class)) {
- EventListener[] var11 = new EventListener[0];
- EventListener[] var12 = new EventListener[0];
-
- try {
- Method var13 = var9.getGetListenerMethod();
- var11 = (EventListener[])MethodUtil.invoke(var13, var2, new Object[0]);
- var12 = (EventListener[])MethodUtil.invoke(var13, var3, new Object[0]);
- } catch (Throwable var17) {
- try {
- Method var14 = var1.getMethod("getListeners", Class.class);
- var11 = (EventListener[])MethodUtil.invoke(var14, var2, new Object[]{var10});
- var12 = (EventListener[])MethodUtil.invoke(var14, var3, new Object[]{var10});
- } catch (Exception var16) {
- return;
- }
- }
-
- String var22 = var9.getAddListenerMethod().getName();
-
- for(int var23 = var12.length; var23 < var11.length; ++var23) {
- invokeStatement(var2, var22, new Object[]{var11[var23]}, var4);
- }
-
- String var24 = var9.getRemoveListenerMethod().getName();
-
- for(int var15 = var11.length; var15 < var12.length; ++var15) {
- invokeStatement(var2, var24, new Object[]{var11[var15]}, var4);
- }
- }
- }
-
- }
- }
-
- protected void initialize(Class<?> var1, Object var2, Object var3, Encoder var4) {
- super.initialize(var1, var2, var3, var4);
- if (var2.getClass() == var1) {
- this.initBean(var1, var2, var3, var4);
- }
-
- }
- }
-